Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


nomadnet/vendor/additional_urwid_widgets/widgets/integer_picker.py ace2969770ebded4cea2d6d23d9823c3641f0965 (ace29697) Text, 12.94 KB

T8b949e#! /usr/bin/env python3
T8b949e# -*- coding: utf-8 -*-


Tff7b72from T7ee787.T7ee787.T7ee787assisting_modulesT7ee787.T7ee787modifier_key Tff7b72import Te6edf3MODIFIER_KEY T8b949e# pylint: disable=unused-import
Tff7b72from T7ee787.T7ee787selectable_row Tff7b72import Te6edf3SelectableRow

Tff7b72import T7ee787sys T8b949e# pylint: disable=unused-import
Tff7b72import T7ee787urwid


Tff7b72class T56d364IntegerPickerTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWidgetWrapTb4b4b4)Tb4b4b4:
T8b949e"""Serves as a selector for integer numbers."""

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3min_vTff7b72=Tb4b4b4(Tff7b72-Te6edf3sysTff7b72.Td2a8ffmaxsize Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4, Te6edf3max_vTff7b72=Te6edf3sysTff7b72.Td2a8ffmaxsizeTb4b4b4, Te6edf3step_lenTff7b72=T79c0ff1Tb4b4b4, Te6edf3jump_lenTff7b72=T79c0ff100Tb4b4b4, Te6edf3on_selection_changeTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3initialization_is_selection_changeTff7b72=Tff7b72FalseTb4b4b4, Te6edf3modifier_keyTff7b72=Te6edf3MODIFIER_KEYTff7b72.Td2a8ffNONETb4b4b4, Te6edf3ascendingTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3return_unused_navigation_inputTff7b72=Tff7b72TrueTb4b4b4, Te6edf3topBar_alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4, Te6edf3topBar_endCovered_propTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ff▲Ta5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4,
Te6edf3topBar_endExposed_propTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ff───Ta5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4, Te6edf3bottomBar_alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4, Te6edf3bottomBar_endCovered_propTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ff▼Ta5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4,
Te6edf3bottomBar_endExposed_propTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ff───Ta5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4, Te6edf3display_syntaxTff7b72=Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4, Te6edf3display_alignTff7b72=Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4, Te6edf3display_propTff7b72=Tb4b4b4(Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(Te6edf3min_v Tff7b72<Tff7b72= Te6edf3max_vTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff'Ta5d6ffmin_vTa5d6ff'Ta5d6ff must be less than or equal to Ta5d6ff'Ta5d6ffmax_vTa5d6ff'Ta5d6ff.Ta5d6ff"
Tff7b72assert Tb4b4b4(Te6edf3min_v Tff7b72<Tff7b72= Te6edf3value Tff7b72<Tff7b72= Te6edf3max_vTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff'Ta5d6ffmin_v <= value <= max_vTa5d6ff'Ta5d6ff must be True.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3value
Tff7b72selfTff7b72.Td2a8ff_minimum Tff7b72= Te6edf3min_v
Tff7b72selfTff7b72.Td2a8ff_maximum Tff7b72= Te6edf3max_v
T8b949e# Specifies how far to move in the respective direction when the keys 'up/down' are pressed.
Tff7b72selfTff7b72.Td2a8ff_step_len Tff7b72= Te6edf3step_len
T8b949e# Specifies how far to jump in the respective direction when the keys 'page up/down' or the mouse events 'wheel up/down'
T8b949e# are passed.
Tff7b72selfTff7b72.Td2a8ff_jump_len Tff7b72= Te6edf3jump_len
T8b949e# A hook which is triggered when the value changes.
Tff7b72selfTff7b72.Td2a8ffon_selection_change Tff7b72= Te6edf3on_selection_change
T8b949e# 'MODIFIER_KEY' changes the behavior, so that the widget responds only to modified input. ('up' => 'ctrl up')
Tff7b72selfTff7b72.Td2a8ff_modifier_key Tff7b72= Te6edf3modifier_key
T8b949e# Specifies whether moving upwards represents a decrease or an increase of the value.
Tff7b72selfTff7b72.Td2a8ff_ascending Tff7b72= Te6edf3ascending
T8b949e# If the minimum has been reached and an attempt is made to select an even smaller value, the input is normally not
T8b949e# swallowed by the widget, but passed on so that other widgets can interpret it. This may result in transferring the focus.
Tff7b72selfTff7b72.Td2a8ff_return_unused_navigation_input Tff7b72= Te6edf3return_unused_navigation_input
T8b949e# The bars are just 'urwid.Text' widgets.
Tff7b72selfTff7b72.Td2a8ff_top_bar Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3topBar_alignTb4b4b4)Tb4b4b4,
Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_bottom_bar Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3bottomBar_alignTb4b4b4)Tb4b4b4,
Tff7b72NoneTb4b4b4)
T8b949e# During the initialization of 'urwid.AttrMap', the value can be passed as non-dict. After initializing, its value can be
T8b949e# manipulated by passing a dict. The dicts I create below will be used later to change the appearance of the widgets.
Tff7b72selfTff7b72.Td2a8ff_topBar_endCovered_markup Tff7b72= Te6edf3topBar_endCovered_propTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_topBar_endCovered_focus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3topBar_endCovered_propTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_topBar_endCovered_offFocus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3topBar_endCovered_propTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_topBar_endExposed_markup Tff7b72= Te6edf3topBar_endExposed_propTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_topBar_endExposed_focus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3topBar_endExposed_propTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_topBar_endExposed_offFocus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3topBar_endExposed_propTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_bottomBar_endCovered_markup Tff7b72= Te6edf3bottomBar_endCovered_propTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_bottomBar_endCovered_focus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3bottomBar_endCovered_propTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_bottomBar_endCovered_offFocus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3bottomBar_endCovered_propTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_bottomBar_endExposed_markup Tff7b72= Te6edf3bottomBar_endExposed_propTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_bottomBar_endExposed_focus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3bottomBar_endExposed_propTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_bottomBar_endExposed_offFocus Tff7b72= Tb4b4b4{Tff7b72NoneTb4b4b4:Te6edf3bottomBar_endExposed_propTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4}
T8b949e# Format the number before displaying it. That way it is easier to read.
Tff7b72selfTff7b72.Td2a8ff_display_syntax Tff7b72= Te6edf3display_syntax
T8b949e# The current value is displayed via this widget.
Tff7b72selfTff7b72.Td2a8ff_display Tff7b72= Te6edf3SelectableRowTb4b4b4(Tb4b4b4[Te6edf3display_syntaxTff7b72.Td2a8ffformatTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4]Tb4b4b4,
Te6edf3alignTff7b72=Te6edf3display_alignTb4b4b4)
Te6edf3display_attr Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_displayTb4b4b4,
Te6edf3display_propTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Te6edf3display_propTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
T8b949e# wrap 'urwid.Pile'
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Tff7b72selfTff7b72.Td2a8ff_top_barTb4b4b4,
Te6edf3display_attrTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_bottom_barTb4b4b4]Tb4b4b4)Tb4b4b4)
T8b949e# Is 'on_selection_change' triggered during the initialization?
Tff7b72if Te6edf3initialization_is_selection_change Tff7b72and Tb4b4b4(Te6edf3on_selection_change Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3on_selection_changeTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3valueTb4b4b4)
Tff7b72def Tff7b72__repr__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700{}Ta5d6ff(value=Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff, min_v=Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff, max_v=Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff, ascending=Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff__class__Tff7b72.Td2a8ff__name__Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_valueTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_ascendingTb4b4b4)
Tff7b72def Td2a8ffrenderTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3focusTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e# Changes the appearance of the bar at the top depending on whether the upper limit is reached.
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tb4b4b4(Tff7b72selfTff7b72.Td2a8ff_minimum Tff7b72if Tff7b72selfTff7b72.Td2a8ff_ascending Tff7b72else Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_top_barTff7b72.Td2a8fforiginal_widgetTff7b72.Td2a8ffset_textTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_topBar_endExposed_markupTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_top_barTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_topBar_endExposed_focus
Tff7b72if Te6edf3focus Tff7b72else Tff7b72selfTff7b72.Td2a8ff_topBar_endExposed_offFocusTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_top_barTff7b72.Td2a8fforiginal_widgetTff7b72.Td2a8ffset_textTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_topBar_endCovered_markupTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_top_barTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_topBar_endCovered_focus
Tff7b72if Te6edf3focus Tff7b72else Tff7b72selfTff7b72.Td2a8ff_topBar_endCovered_offFocusTb4b4b4)
T8b949e# Changes the appearance of the bar at the bottom depending on whether the lower limit is reached.
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tb4b4b4(Tff7b72selfTff7b72.Td2a8ff_maximum Tff7b72if Tff7b72selfTff7b72.Td2a8ff_ascending Tff7b72else Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_bottom_barTff7b72.Td2a8fforiginal_widgetTff7b72.Td2a8ffset_textTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_bottomBar_endExposed_markupTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_bottom_barTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_bottomBar_endExposed_focus
Tff7b72if Te6edf3focus Tff7b72else Tff7b72selfTff7b72.Td2a8ff_bottomBar_endExposed_offFocusTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_bottom_barTff7b72.Td2a8fforiginal_widgetTff7b72.Td2a8ffset_textTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_bottomBar_endCovered_markupTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_bottom_barTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_bottomBar_endCovered_focus
Tff7b72if Te6edf3focus Tff7b72else Tff7b72selfTff7b72.Td2a8ff_bottomBar_endCovered_offFocusTb4b4b4)
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffrenderTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3focusTff7b72=Te6edf3focusTb4b4b4)
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
T8b949e# A keystroke is changed to a modified one ('up' => 'ctrl up'). This prevents the widget from responding when the arrows
T8b949e# keys are used to navigate between widgets. That way it can be used in a 'urwid.Pile' or similar.
Tff7b72if Te6edf3key Tff7b72== Tff7b72selfTff7b72.Td2a8ff_modifier_keyTff7b72.Td2a8ffprepend_toTb4b4b4(Ta5d6ff"Ta5d6ffupTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3successful Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tff7b72-Tff7b72selfTff7b72.Td2a8ff_step_lenTb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Tff7b72selfTff7b72.Td2a8ff_modifier_keyTff7b72.Td2a8ffprepend_toTb4b4b4(Ta5d6ff"Ta5d6ffdownTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3successful Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_step_lenTb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Tff7b72selfTff7b72.Td2a8ff_modifier_keyTff7b72.Td2a8ffprepend_toTb4b4b4(Ta5d6ff"Ta5d6ffpage upTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3successful Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tff7b72-Tff7b72selfTff7b72.Td2a8ff_jump_lenTb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Tff7b72selfTff7b72.Td2a8ff_modifier_keyTff7b72.Td2a8ffprepend_toTb4b4b4(Ta5d6ff"Ta5d6ffpage downTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3successful Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_jump_lenTb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Tff7b72selfTff7b72.Td2a8ff_modifier_keyTff7b72.Td2a8ffprepend_toTb4b4b4(Ta5d6ff"Ta5d6ffhomeTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3successful Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ff-infTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Tff7b72selfTff7b72.Td2a8ff_modifier_keyTff7b72.Td2a8ffprepend_toTb4b4b4(Ta5d6ff"Ta5d6ffendTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3successful Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tffa657floatTb4b4b4(Ta5d6ff"Ta5d6ffinfTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3successful Tff7b72= Tff7b72False
Tff7b72return Te6edf3key Tff7b72if Tff7b72not Te6edf3successful Tff7b72else Tff7b72None
Tff7b72def Td2a8ffmouse_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3eventTb4b4b4, Te6edf3buttonTb4b4b4, Te6edf3colTb4b4b4, Te6edf3rowTb4b4b4, Te6edf3focusTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3focusTb4b4b4:
T8b949e# An event is changed to a modified one ('mouse press' => 'ctrl mouse press'). This prevents the original widget from
T8b949e# responding when mouse buttons are also used to navigate between widgets.
Tff7b72if Te6edf3event Tff7b72== Tff7b72selfTff7b72.Td2a8ff_modifier_keyTff7b72.Td2a8ffprepend_toTb4b4b4(Ta5d6ff"Ta5d6ffmouse pressTa5d6ff"Tb4b4b4)Tb4b4b4:
T8b949e# mousewheel up
Tff7b72if Te6edf3button Tff7b72== T79c0ff4.0Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tff7b72-Tff7b72selfTff7b72.Td2a8ff_jump_lenTb4b4b4)
Tff7b72return Te6edf3result Tff7b72if Tff7b72selfTff7b72.Td2a8ff_return_unused_navigation_input Tff7b72else Tff7b72True
T8b949e# mousewheel down
Tff7b72elif Te6edf3button Tff7b72== T79c0ff5.0Tb4b4b4:
Te6edf3result Tff7b72= Tff7b72selfTff7b72.Td2a8ff_change_valueTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_jump_lenTb4b4b4)
Tff7b72return Te6edf3result Tff7b72if Tff7b72selfTff7b72.Td2a8ff_return_unused_navigation_input Tff7b72else Tff7b72True
Tff7b72return Tff7b72False
T8b949e# This method tries to change the value depending on the desired arrangement and returns True if this change was successful.
Tff7b72def Td2a8ff_change_valueTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3summandTb4b4b4)Tb4b4b4:
Te6edf3value_before_input Tff7b72= Tff7b72selfTff7b72.Td2a8ff_value
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_ascendingTb4b4b4:
Te6edf3new_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_value Tff7b72+ Te6edf3summand
Tff7b72if Te6edf3summand Tff7b72< T79c0ff0Tb4b4b4:
T8b949e# If the corresponding limit has already been reached, then determine whether the unused input should be
T8b949e# returned or swallowed.
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4:
Tff7b72return Tff7b72not Tff7b72selfTff7b72.Td2a8ff_return_unused_navigation_input
T8b949e# If the new value stays within the permitted range, use it.
Tff7b72elif Te6edf3new_value Tff7b72> Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3new_value
T8b949e# The permitted range would be exceeded, so the limit is set instead.
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_minimum
Tff7b72elif Te6edf3summand Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4:
Tff7b72return Tff7b72not Tff7b72selfTff7b72.Td2a8ff_return_unused_navigation_input
Tff7b72elif Te6edf3new_value Tff7b72< Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3new_value
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_maximum
Tff7b72elseTb4b4b4:
Te6edf3new_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_value Tff7b72- Te6edf3summand
Tff7b72if Te6edf3summand Tff7b72< T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4:
Tff7b72return Tff7b72not Tff7b72selfTff7b72.Td2a8ff_return_unused_navigation_input
Tff7b72elif Te6edf3new_value Tff7b72< Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3new_value
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_maximum
Tff7b72elif Te6edf3summand Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4:
Tff7b72return Tff7b72not Tff7b72selfTff7b72.Td2a8ff_return_unused_navigation_input
Tff7b72elif Te6edf3new_value Tff7b72> Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3new_value
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Tff7b72selfTff7b72.Td2a8ff_minimum
T8b949e# Update the displayed value.
Tff7b72selfTff7b72.Td2a8ff_displayTff7b72.Td2a8ffset_contentsTb4b4b4(Tb4b4b4[Tff7b72selfTff7b72.Td2a8ff_display_syntaxTff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_valueTb4b4b4)Tb4b4b4]Tb4b4b4)
T8b949e# If the value has changed, execute the hook (if existing).
Tff7b72if Tb4b4b4(Te6edf3value_before_input Tff7b72!= Tff7b72selfTff7b72.Td2a8ff_valueTb4b4b4) Tff7b72and Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffon_selection_change Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffon_selection_changeTb4b4b4(Te6edf3value_before_inputTb4b4b4,
Tff7b72selfTff7b72.Td2a8ff_valueTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffget_valueTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_value
Tff7b72def Td2a8ffset_valueTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tb4b4b4(Tff7b72selfTff7b72.Td2a8ff_minimum Tff7b72<Tff7b72= Te6edf3value Tff7b72<Tff7b72= Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ff'Ta5d6ffminimum <= value <= maximumTa5d6ff'Ta5d6ff must be True.Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3value Tff7b72!= Tff7b72selfTff7b72.Td2a8ff_valueTb4b4b4:
Te6edf3value_before_change Tff7b72= Tff7b72selfTff7b72.Td2a8ff_value
Tff7b72selfTff7b72.Td2a8ff_value Tff7b72= Te6edf3value
T8b949e# Update the displayed value.
Tff7b72selfTff7b72.Td2a8ff_displayTff7b72.Td2a8ffset_contentsTb4b4b4(Tb4b4b4[Tff7b72selfTff7b72.Td2a8ff_display_syntaxTff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_valueTb4b4b4)Tb4b4b4]Tb4b4b4)
T8b949e# Execute the hook (if existing).
Tff7b72if Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffon_selection_change Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffon_selection_changeTb4b4b4(Te6edf3value_before_changeTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_valueTb4b4b4)
Tff7b72def Td2a8ffset_to_minimumTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_valueTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4)
Tff7b72def Td2a8ffset_to_maximumTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_valueTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4)
Tff7b72def Td2a8ffset_minimumTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3new_minTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3new_min Tff7b72> Tff7b72selfTff7b72.Td2a8ff_maximumTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ff'Ta5d6ffnew_minTa5d6ff'Ta5d6ff must be less than or equal to the maximum value.Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_minimum Tff7b72= Te6edf3new_min
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72< Te6edf3new_minTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_to_minimumTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffset_maximumTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3new_maxTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3new_max Tff7b72< Tff7b72selfTff7b72.Td2a8ff_minimumTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ff'Ta5d6ffnew_maxTa5d6ff'Ta5d6ff must be greater than or equal to the minimum value.Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_maximum Tff7b72= Te6edf3new_max
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_value Tff7b72> Te6edf3new_maxTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_to_maximumTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffminimum_is_selectedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tff7b72selfTff7b72.Td2a8ff_minimum
Tff7b72def Td2a8ffmaximum_is_selectedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_value Tff7b72== Tff7b72selfTff7b72.Td2a8ff_maximum


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────